#include "cube.h"

Cube::Cube()
  : mCubeList(glGenLists(1))
{
  glNewList(mCubeList, GL_COMPILE);
    glBegin(GL_QUADS);
      //bottom face
      glTexCoord2f(1, 1); glVertex3f(-1, -1, -1);
      glTexCoord2f(0, 1); glVertex3f(1, -1, -1);
      glTexCoord2f(0, 0); glVertex3f(1, -1, 1);
      glTexCoord2f(1, 0); glVertex3f(-1, -1, 1);

      //front face
      glTexCoord2f(0, 0); glVertex3f(-1, -1, 1);
      glTexCoord2f(1, 0); glVertex3f(1, -1, 1);
      glTexCoord2f(1, 1); glVertex3f(1, 1, 1);
      glTexCoord2f(0, 1); glVertex3f(-1, 1, 1);

      //back face
      glTexCoord2f(1, 0); glVertex3f(-1, -1, -1);
      glTexCoord2f(1, 1); glVertex3f(-1, 1, -1);
      glTexCoord2f(0, 1); glVertex3f(1, 1, -1);
      glTexCoord2f(0, 0); glVertex3f(1, -1, -1);

      //right face
      glTexCoord2f(1, 0); glVertex3f(1, -1, -1);
      glTexCoord2f(1, 1); glVertex3f(1, 1, -1);
      glTexCoord2f(0, 1); glVertex3f(1, 1, 1);
      glTexCoord2f(0, 0); glVertex3f(1, -1, 1);

      //left face
      glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
      glTexCoord2f(1, 0); glVertex3f(-1, -1, 1);
      glTexCoord2f(1, 1); glVertex3f(-1, 1, 1);
      glTexCoord2f(0, 1); glVertex3f(-1, 1, -1);

      //top face
      glTexCoord2f(0, 1); glVertex3f(-1, 1, -1);
      glTexCoord2f(0, 0); glVertex3f(-1, 1, 1);
      glTexCoord2f(1, 0); glVertex3f(1, 1, 1);
      glTexCoord2f(1, 1); glVertex3f(1, 1, -1);
    glEnd();
  glEndList();
}

Cube::~Cube()
{
  glDeleteLists(mCubeList, 1);
  mCubeList = 0;
}

const GLuint& Cube::getDisplayList() const
{
  return mCubeList;
}
